<?php

if (!function_exists('log_daily')) {
    function log_daily($name = 'lumen')
    {
        return new Monolog\Logger('lumen', [
            (new Monolog\Handler\StreamHandler(dirname(__DIR__) . '/storage/logs/' . date('Y-m-d') . '/' . $name . '.log', Monolog\Logger::DEBUG))
                ->setFormatter(new Monolog\Formatter\LineFormatter(null, null, true, true))
        ]);
    }
}


if (!function_exists('deal_url')) {
    function deal_url($url)
    {
        return strpos($url, 'http') === false ? 'http://' . $url : $url;
    }
}

if (!function_exists('listToTree')) {
    function listToTree($list, $rootId = 0)
    {
        $arr = [];
        foreach ($list as $item) {
            if ($item['parent_id'] == $rootId) {
                if (!isset($item['is_last']) || !$item['is_last']) {
                    $children = listToTree($list, $item['id']);
                    if ($children) {
                        $item['children'] = $children;
                    }
                }
                $arr[] = $item;
            }
        }
        return $arr;
    }
}

if (!function_exists('empty_dir')) {
    function empty_dir($dir)
    {
        if (!is_dir($dir)) {
            return false;
        }

        $handle = opendir($dir);
        if ($handle === false) {
            return false;
        }

        while (($file = readdir($handle)) !== false) {
            if ($file === '.' || $file === '..') {
                continue;
            }

            $filePath = $dir . DIRECTORY_SEPARATOR . $file;

            if (is_file($filePath)) {
                unlink($filePath);
            } elseif (is_dir($filePath)) {
                // 如果遇到子目录，可以递归调用此函数
                empty_dir($filePath);
            }
        }

        closedir($handle);

        return true;
    }
}

if (!function_exists('del_dir')) {
    function del_dir($dirPath)
    {
        // 检查目录是否存在
        if (!is_dir($dirPath)) {
            return false;
        }

        // 打开目录句柄
        $dirHandle = opendir($dirPath);

        // 遍历目录中的每个条目
        while (($entry = readdir($dirHandle)) !== false) {
            // 忽略当前目录(.)和父目录(..)
            if ($entry == '.' || $entry == '..') {
                continue;
            }

            // 获取完整路径
            $fullPath = $dirPath . DIRECTORY_SEPARATOR . $entry;

            // 如果是目录，则递归删除
            if (is_dir($fullPath)) {
                del_dir($fullPath);
            } else {
                // 如果是文件，则直接删除
                unlink($fullPath);
            }
        }

        // 关闭目录句柄
        closedir($dirHandle);

        // 删除空目录
        if (rmdir($dirPath)) {
            return true;
        } else {
            return false;
        }
    }
}

if (!function_exists('base64ToImage')) {
    function base64ToImage($base64Data, $outputFile)
    {

        // 解码Base64数据
        $decodedData = base64_decode($base64Data);

        if ($decodedData === false) {
            throw new Exception('Invalid Base64 data');
        }

        // 保存文件
        $result = file_put_contents($outputFile, $decodedData);

        if ($result === false) {
            throw new Exception('Failed to save the image file');
        }

        return $outputFile;
    }

}
